package genercity;

import java.util.Map;

/**
 * @Author wangzhipeng
 * @Date 2020-08-14 9:45 上午
 * @Description 演示继承泛型
 *  常用的泛型标志 T(Type) E(Element) k(key) V(value)
 *
 */
public class DemoUse {
    /**
     *
     * @param demo
     */
    public void sayHello(Demo<Number> demo)
    {
        System.out.println(demo.getT2());



    }

    // 改进上面的方法 使用通配符 就可以使用任何继承Number的类 包括Number

    /**
     * <? extends Number>只要继承自Number或者Number本身就能接受
     * @param demo
     */
    public void sayHelloAnother(Demo<? extends Number> demo)
    {
        System.out.println(demo.getT2());
    }

    /**
     * <? super Number> 只要是Integer的超类或者Integer本身就可以接受
     * @param demo
     */
    public void sayHelloAnother2(Demo<? super Number> demo)
    {
        System.out.println(demo.getT2());
    }



    public void demo(){

        DemoUse demoUse = new DemoUse();
        Demo<Number> demo = new Demo<>();
        demo.setT2(10);
        demoUse.sayHello(demo);

        Demo<Integer> demo2 = new Demo<>();
        demo2.setT2(10);
        //demoUse.sayHello(demo2);//报错，泛型的类型是继承的，但是不能像多态一样

        Demo<Integer> demo3 = new Demo<>();
        demo3.setT2(10);
        demoUse.sayHelloAnother(demo3); //正确的泛型继承，使用通配符


    }
}
